package org.geektimes.dependency.injection.web.context;

import java.lang.annotation.Annotation;
import java.util.List;

/**
 * @Author: jipeng
 * @Description:
 * @Date: Created in 2021/3/26 8:16
 */
public interface ComponentContext {

    /**
     * 初始化
     */
    void init();

    /**
     * 上下文销毁方法
     */
    void destroy();


    /**
     * 通过名称查找组件对象
     * @param name  组件名称
     * @param <C>   组件对象的类型
     * @return  如果找不到返回，<code>null</code>
     */
    <C> C getComponent(String name);


    /**
     * 根据注解找到对应的组件对象集合
     * @param annotationType  注解类型
     * @return  被注解的组件对象集合
     */
    List<Object> getComponentWithAnnotation(Class<? extends Annotation> annotationType);


    /**
     * 获取所有的组件名称
     * @return 组件名称
     */
    List<String> getComponentNames();


}
